www.gusucode.com > VC++ 宾馆管理系统(MSSQL) > VC++ 宾馆管理系统(MSSQL)/gusucode/Code/CheckOutDLG.cpp

    //Download by http://www.NewXing.com
// CheckOutDLG.cpp : implementation file

#include "stdafx.h"
#include "hotel_mis.h"
#include "CheckOutDLG.h"
#include "Hotel_MISView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCheckOutDLG dialog


CCheckOutDLG::CCheckOutDLG(CWnd* pParent /*=NULL*/)
	: CDialog(CCheckOutDLG::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCheckOutDLG)
	m_sDiscount = _T("");
	m_sID = _T("");
	m_sInDate = _T("");
	m_sMemo = _T("");
	m_sName = _T("");
	m_tOutDate = COleDateTime::GetCurrentTime();
	m_sPosition = _T("");
	m_sPrice = _T("");
	m_sRoomNo = _T("");
	m_sType = _T("");
	//}}AFX_DATA_INIT
}


void CCheckOutDLG::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCheckOutDLG)
	DDX_Text(pDX, IDD_CHECKOUT_DISCOUNT, m_sDiscount);
	DDX_Text(pDX, IDD_CHECKOUT_ID, m_sID);
	DDX_Text(pDX, IDD_CHECKOUT_INDATE, m_sInDate);
	DDX_Text(pDX, IDD_CHECKOUT_MEMO, m_sMemo);
	DDX_Text(pDX, IDD_CHECKOUT_NAME, m_sName);
	DDX_DateTimeCtrl(pDX, IDD_CHECKOUT_OUTDATE, m_tOutDate);
	DDX_Text(pDX, IDD_CHECKOUT_POSITION, m_sPosition);
	DDX_Text(pDX, IDD_CHECKOUT_PRICE, m_sPrice);
	DDX_CBString(pDX, IDD_CHECKOUT_ROOMNO, m_sRoomNo);
	DDX_Text(pDX, IDD_CHECKOUT_TYPE, m_sType);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCheckOutDLG, CDialog)
	//{{AFX_MSG_MAP(CCheckOutDLG)
	ON_CBN_SELCHANGE(IDD_CHECKOUT_ROOMNO, OnCheckoutRoomNoSelChange)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCheckOutDLG message handlers

BOOL CCheckOutDLG::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	_variant_t strQuery, Holder;
	if (m_bAppend)// Add CheckOut
	{
	 	CString sRoomNo;
	    
	    // Init Combobox
		
		strQuery = "select * from rooms where roomNO in\
			         ( \
					   select roomno from bookin where checkdate is NULL\
					 )";
	    theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	    int iCount = theApp.m_pADOSet->GetRecordCount();
		theApp.m_pADOSet->MoveFirst();
		for (int i=0; i<iCount; i++)
		{
		    Holder = theApp.m_pADOSet->GetCollect("roomno");
	        ((CComboBox*)GetDlgItem(IDD_CHECKOUT_ROOMNO))->InsertString(i, Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder);
		    if ( 0==i )
			{
				sRoomNo = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;	
			    // Get RoomType
				Holder = theApp.m_pADOSet->GetCollect("roomtype");
				m_sType = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
                // Get roomposition
				Holder = theApp.m_pADOSet->GetCollect("roomposition");
				m_sPosition = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
                // Get roomprice
				Holder = theApp.m_pADOSet->GetCollect("roomprice");
				m_sPrice.Format("%.2f", Holder.dblVal);
			}			
			theApp.m_pADOSet->MoveNext();
		}
	    ((CComboBox*)GetDlgItem(IDD_BOOKIN_ROOMNO))->SetCurSel(0);
	     
		// Get customer info
		strQuery = "select * from bookin where roomno='"+sRoomNo+"'";
	    theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	    // Get name
		Holder = theApp.m_pADOSet->GetCollect("customname");
	    m_sName = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
		// Get ID
        Holder = theApp.m_pADOSet->GetCollect("customID");
	    m_sID = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
		// Get InDate
        COleDateTime time;
		Holder = theApp.m_pADOSet->GetCollect("indate");
	    time = Holder;
		m_sInDate = time.Format("%Y-%m-%d");
		// Get ID
        Holder = theApp.m_pADOSet->GetCollect("discount");
	    m_sDiscount.Format("%.2f", Holder.vt==VT_NULL?0:Holder.dblVal);
	    // Get Memo
		Holder = theApp.m_pADOSet->GetCollect("inmemo");
	    m_sMemo = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
	
	}
	else// Alter CheckOut
	{
		((CComboBox*)GetDlgItem(IDD_CHECKOUT_ROOMNO))->InsertString(0, m_sRoomNo);
		
	    // Get Room Info
		strQuery = "select * from rooms where roomNO='"+m_sRoomNo+"'";
	    theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	    int iCount = theApp.m_pADOSet->GetRecordCount();
		theApp.m_pADOSet->MoveFirst();
	      // Get RoomType
		Holder = theApp.m_pADOSet->GetCollect("roomtype");
	    m_sType = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
          // Get roomposition
		Holder = theApp.m_pADOSet->GetCollect("roomposition");
		m_sPosition = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
          // Get roomprice
		Holder = theApp.m_pADOSet->GetCollect("roomprice");
		m_sPrice.Format("%.2f", Holder.dblVal);
		
	    ((CComboBox*)GetDlgItem(IDD_BOOKIN_ROOMNO))->SetCurSel(0);
	}

	UpdateData(false);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CCheckOutDLG::OnCheckoutRoomNoSelChange() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	_variant_t strQuery, Holder;	
	
	// Update room info
	strQuery = "select * from rooms where roomNO='"+m_sRoomNo+"'";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
      // Get RoomType
	Holder = theApp.m_pADOSet->GetCollect("roomtype");
	m_sType = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
      // Get roomposition
	Holder = theApp.m_pADOSet->GetCollect("roomposition");
	m_sPosition = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
      // Get roomprice
	Holder = theApp.m_pADOSet->GetCollect("roomprice");
	m_sPrice.Format("%.2f", Holder.dblVal);
    
	// Update customer info
    strQuery = "select * from bookin where roomno='"+m_sRoomNo+"'";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	  // Get name
	Holder = theApp.m_pADOSet->GetCollect("customname");
	m_sName = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
	// Get ID
    Holder = theApp.m_pADOSet->GetCollect("customID");
	m_sID = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
	  // Get InDate
    COleDateTime time;
	Holder = theApp.m_pADOSet->GetCollect("indate");
	time = Holder;
	m_sInDate = time.Format("%Y-%m-%d");
	  // Get ID
    Holder = theApp.m_pADOSet->GetCollect("discount");
	m_sDiscount.Format("%.2f", Holder.vt==VT_NULL?0:Holder.dblVal);
	  // Get Memo
	Holder = theApp.m_pADOSet->GetCollect("inmemo");
	m_sMemo = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
    	
	UpdateData(false);
}

void CCheckOutDLG::OnOK() 
{
	// TODO: Add extra validation here
	
    UpdateData(true);
	
	// Get InDate
	_variant_t strQuery, Holder;
	COleDateTime tInDate;
	strQuery = "select indate from bookin where roomno='"+m_sRoomNo+"'";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
    Holder = theApp.m_pADOSet->GetCollect("indate");
	tInDate = Holder;

	if ( tInDate>m_tOutDate )
	{
		AfxMessageBox(_T("结帐日期小于入住日期,请重新输入结帐日期!"), MB_ICONEXCLAMATION);
		return;
	}
	
	// Caculate Bill
	COleDateTimeSpan timeSpan;
	timeSpan = m_tOutDate - tInDate;
	int iDays = timeSpan.GetDays()+1;
    float fPrice = atof(m_sPrice);
	float fDiscount = atof(m_sDiscount);
	
	float fAmmount = fPrice*iDays*fDiscount/100;
	
	CString sAmmount;
	sAmmount.Format("%.2f", fAmmount);
    CString sTip = _T("金额为:");
	sTip += sAmmount;
	sTip += _T("  结算完毕!!");
	AfxMessageBox(sTip, MB_ICONINFORMATION);

	// Update DataBase
    CString sOutDate;
	sOutDate = m_tOutDate.Format("%y-%m-%d");
	strQuery = "update bookin set checkdate='"+sOutDate+"', ammount="+sAmmount+" where roomno='"+m_sRoomNo+"'";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	
	// Refresh CheckOut List
	strQuery = "select * from bookin where checkdate is not NULL";
	CHotel_MISView* p = (CHotel_MISView*)(((CMainFrame*)AfxGetMainWnd())->GetActiveView());
	p->RefreshCheckOut(strQuery);
	CDialog::OnOK();
}